package Socket;

import Modelo.Autito;
import Modelo.Escenario;
import Modelo.Figuras;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Cliente {

    public Socket socket;
    Integer puerto=5000;
    String serverHost = "localhost";


    ObjectInputStream entrada;
    ObjectOutputStream salida;

    RunCliente runC;
    ClienteEscucha cliente_escucha;

    TeclaCliente tecla;
    Escenario escena;

    Vector<Figuras> vf;


private Cliente() {

            tecla = new TeclaCliente();

            escena = new Escenario("SimTrafic Cliente");

            escena.addFigurasEstaticas();
            //escena.addPantalla(); //esto refresca todo el tiempo el vector figuras

            escena.addExtras();

            escena.jframe.setVisible(true);
            
           
            

        try {
                socket = new Socket(serverHost,puerto);


                entrada = new ObjectInputStream(socket.getInputStream());


                //recibo el id de mi autito
                tecla.idcliente  = (Integer)entrada.readObject();
                System.out.println ("Me dieron el autito " + tecla.idcliente);



                runC=new RunCliente(this);
                cliente_escucha = new ClienteEscucha(this);

        } catch (Exception ex) {System.out.println("Error: "+ex);}

            cliente_escucha.start(); //recibe vector de figuras para refrescar

}

public void cerrar(){
    //Cerrar los canales de entrada y salida que se hayan abierto
    try {
        salida.close();
        entrada.close();
        } catch (IOException ex) {System.out.println("Error al cerrar"); }
}



synchronized  public void setTecla(int t){

tecla.codtecla=t;
enviarTecla();
}


synchronized public void enviarTecla(){


        try {
            salida = new ObjectOutputStream(socket.getOutputStream());
            salida.writeObject(tecla);
            salida.flush();
        } catch (IOException ex) {
           // Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }

       // System.out.println("Tecla a enviada: "+tecla);

	}

public void recibirVector(){
        try {

        entrada = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
        vf =  (Vector<Figuras>) entrada.readObject();

        escena.setFigura(vf);

        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }
    
     escena.refrescar();
    
    
    /*for(Figuras f: vf){
    if(f.getClass().getName().equals("Modelo.Autito")){
    escena.updateMarcador((Autito) f); //actualizo el update de los 2 autitos
    }
    
    }*/
}
public static void main(String[] args) {
        new Cliente();
}

}
